home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 010 / chess1.bas (.txt) < prev    next >
Encoding:
GW-BASIC  |  1987-04-11  |  15.5 KB  |  370 lines

  1. 0  ' exit on error
  2. 1  CLEAR ,,2048:KEY OFF
  3. 2  CLS:COLOR 0,7:LOCATE 1,6:PRINT SPACE$(68)
  4. 3  LOCATE 2,6:PRINT" ********* Chess *********   By: M. C. Rakaska, Ides of March, 1980 "
  5. 4  LOCATE 3,6:PRINT SPACE$(68):LOCATE 4,6:PRINT"      Adapted for the IBM PC by  S. W. Huggins, December, 1981      "
  6. 5  LOCATE 5,6:PRINT SPACE$(68)
  7. 6  LOCATE 6,6:PRINT"                   <D-o-w-n-l-o-a-d-e-d  F-r-o-m>                   "
  8. 12  LOCATE 7,6:PRINT SPACE$(68):LOCATE 8,6:PRINT"  PC-NET #1 of Denver, Co.   303-773-2699 or Voice at 303-694-9038  ":LOCATE 9,6:PRINT SPACE$(68)
  9. 20  DEFINT A-Z:A=0:B=0:X=0:Y=0:S=0:A0=0:T=0:A8=0:A1=0:A2=0:A3=0:A4=0:B1=0:B6!=0:           H=0:M=0:N=0:P=0:W=0:A5=0:I=1:DIM C(64), A(10,10), B(10,10), T(10,10), S(8,8)
  10. 25  COLOR 7,0:LOCATE 18,1:PRINT"Important:  Use Caps Lock key to shift to UPPER CASE before continuing...."
  11. 30  LOCATE 21,1:INPUT "DO YOU WANT INSTRUCTIONS ";IN$:IN$=LEFT$(IN$,1):             IF IN$="Y" THEN GOSUB 2220
  12. 40  CL$="N"
  13. 50  CLS:INPUT "YOUR NAME IS ";B$:IF B$="" THEN B$=" HUMAN " ELSE B$=LEFT$(B$,9)
  14. 60  CLS:PRINT "LEVEL OF PLAY";:INPUT B8!:IF B8!=0 THEN B8!=1:B7!=1+RND(0)/2:ELSE    B7!=(B8!+1)/2+RND(0)/2
  15. 70  CLS:PRINT "DO YOU WANT WHITE ";B$;" ";:INPUT C$:GOSUB 790:IF LEFT$(C$,1)<>"N"   THEN GOSUB 900:GOTO 190
  16. 80  GOSUB 890:IF CL$="Y" THEN LOCATE 25,6,0:                                        PRINT "START ";TIME$;
  17. 100  F!=-99:A0=0:FOR J=1 TO 8:FOR K=1 TO 8:IF A(J,K)=99 THEN A6=J:A7=K
  18. 110  NEXT:NEXT
  19. 120  FOR X=1 TO 8:FOR Y=1 TO 8:IF A(X,Y)<0 THEN GOSUB 270:                           IF F!>=B7! THEN GOTO 150
  20. 130  NEXT:NEXT:IF F!>=-9 THEN GOTO 150 ELSE GOSUB 900
  21. 140  LOCATE 25,62,0: PRINT "I CONCEED    ";:GOTO 2190
  22. 150  A(R,U)=A(E,Q):A(E,Q)=1:IF A(R,U)=-2 AND U=1 THEN A(R,U)=-9
  23. 160  X=R:Y=U:A0=4:GOSUB 270:LOCATE 25,62,0:PRINT "IS MY MOVE    ";:                  LOCATE 25,51,0:PRINT CHR$(E+64);Q;"- "CHR$(R+64);U;
  24. 170  IF CL$="Y" THEN LOCATE 25,31,0:PRINT "STOP ";TIME$;
  25. 180  X=E:Y=Q:GOSUB 910:X=R:Y=U:GOSUB 910:IF C=1 THEN LOCATE 24,1,1:                  PRINT "CHECK ";:C=0 ELSE LOCATE 24,1,1:PRINT "      ";
  26. 190  IF X$="S" THEN GOSUB 1830:B7!=3*RND(0):LOCATE 25,1,1:PRINT "SELF-PLAYING";: GOSUB 2480:GOTO 100
  27. 195  LOCATE 25,1,1:PRINT "MOVE "+CHR$(7);B$;:GOSUB 1590:D=0:B4=A:B9=B:B5=0:IF A(X,Y)=2 AND Y=5 AND B=6 AND A(A,B)=1 AND ABS(A-X)=1 THEN B5=1:GOTO 220
  28. 200  IF X$="K" OR X$="Q" THEN GOSUB 900:LOCATE 25,1,0:PRINT STRING$(14," ");:        GOTO 100
  29. 210  IF X$="S" THEN CL$="N":GOTO 190:ELSE A0=3:GOSUB 250:                            IF D=0 THEN LOCATE 25,31,0:PRINT "ILLEGAL       ";:GOTO 190
  30. 220  LOCATE 25,31,1:PRINT "OK            ";:A=B4:B=B9:A(A,B)=A(X,Y):A(X,Y)=1:        GOSUB 910:X=A:Y=B:GOSUB 910:IF N$="N" THEN GOSUB 900:N$=" "
  31. 230  IF A(A,B)=2 AND B=8 THEN LOCATE 25,31,1:PRINT "WHAT PIECE";:GOSUB 2100:         X=A:Y=B:GOSUB 910:LOCATE 25,31,1:PRINT "              ";
  32. 240  IF B5=1 THEN A(A,B-1)=1:X=A:Y=B-1:GOSUB 910:GOTO 100:ELSE GOTO 100
  33. 250  LOCATE 1,78,0:PRINT "$ ";:                                                      ON A(X,Y) GOTO 0, 480, 0, 380, 330, 0, 280, 0, 330:GOTO 460
  34. 270  ON -A(X,Y) GOTO 0, 530, 0, 380, 330, 0, 280, 0, 330:GOTO 460
  35. 280  B=Y:FOR A=X+1 TO 8:GOSUB 640:IF S=0 THEN NEXT ELSE GOTO 290
  36. 290  FOR A=X-1 TO 1 STEP -1:GOSUB 640:IF S=0 THEN NEXT ELSE GOTO 300
  37. 300  A=X:FOR B=Y+1 TO 8:GOSUB 640:IF S=0 THEN NEXT ELSE GOTO 310
  38. 310  FOR B=Y-1 TO 1 STEP -1:GOSUB 640:IF S=0 THEN NEXT:RETURN ELSE RETURN
  39. 330  B=Y:FOR A=X+1 TO 8:B=B+1:GOSUB 640:IF S=0 THEN NEXT ELSE GOTO 340
  40. 340  B=Y:FOR A=X-1 TO 1 STEP -1:B=B-1:GOSUB 640:IF S=0 THEN NEXT ELSE GOTO 350
  41. 350  B=Y:FOR A=X-1 TO 1 STEP -1:B=B+1:GOSUB 640:IF S=0 THEN NEXT ELSE GOTO 360
  42. 360  B=Y:FOR A=X+1 TO 8:B=B-1:GOSUB 640: IF S=0 THEN NEXT ELSE GOTO 370
  43. 370  IF ABS(A(X,Y))=9 THEN GOTO 280:ELSE RETURN
  44. 380  A=X+2:B=Y+1:IF A<9 AND B<9 THEN GOSUB 650 ELSE GOTO 390
  45. 390  B=B-2:IF B>0 AND A<9 THEN GOSUB 650 ELSE GOTO 400
  46. 400  A=A-4:IF A>0 AND B>0 THEN GOSUB 650 ELSE GOTO 410
  47. 410  B=B+2:IF B<9 AND A>0 THEN GOSUB 650 ELSE GOTO 420
  48. 420  A=A+1:B=B+1:IF A>0 AND A<9 AND B<9 THEN GOSUB 650 ELSE GOTO 430
  49. 430  B=B-4:IF B>0 AND A>0 AND A<9 THEN GOSUB 650 ELSE GOTO 440
  50. 440  A=A+2:IF A>0 AND A<9 AND B>0 THEN GOSUB 650 ELSE GOTO 450
  51. 450  B=B+4:IF B<9 AND A>0 AND A<9 THEN GOSUB 650:RETURN ELSE RETURN
  52. 460  FOR A=X-1 TO X+1:FOR B=Y-1 TO Y+1:IF A(A,B)<>0 THEN GOSUB 650
  53. 470  NEXT:NEXT:RETURN
  54. 480  A=X:IF Y>2 THEN GOTO 500 ELSE GOTO 490
  55. 490  B=Y+1:IF A(A,B)=1 THEN GOSUB 660:B=B+1:IF A(A,B)=1 THEN GOSUB 660:GOTO 510:     ELSE GOTO 510:ELSE GOTO 510
  56. 500  B=Y+1:IF A(A,B)=1 THEN GOSUB 660 ELSE GOTO 510
  57. 510  A=X+1:B=Y+1:IF A(A,B)<0 THEN GOSUB 660 ELSE GOTO 520
  58. 520  A=A-2:IF A(A,B)<0 THEN GOSUB 660:RETURN:ELSE RETURN
  59. 530  A=X:IF Y<7 THEN GOTO 550 ELSE GOTO 540
  60. 540  B=Y-1:IF A(A,B)=1 THEN GOSUB 660:B=B-1:IF A(A,B)=1 THEN GOSUB 660:GOTO 560:     ELSE GOTO 560:ELSE GOTO 560
  61. 550  B=Y-1:IF A(A,B)=1 THEN GOSUB 660 ELSE GOTO 560
  62. 560  A=X-1:B=Y-1:IF A(A,B)>1 THEN GOSUB 660 ELSE GOTO 570
  63. 570  A=A+2:IF A(A,B)>1 THEN GOSUB 660:RETURN:ELSE GOTO 590
  64. 580  T=A(A,B):IF T=-99 THEN B1=T:RETURN:ELSE GOTO 590
  65. 590  A5=S:IF ABS(T)<=A(X,Y) THEN A(A,B)=A(X,Y):A(X,Y)=1:GOTO 610:ELSE GOTO 600
  66. 600  IF T<B1 THEN B1=T:S=A5:RETURN:ELSE S=A5:RETURN
  67. 610  A1=X:A2=Y:A3=A:A4=B:A8=T:A0=2:FOR X=1 TO 8:FOR Y=1 TO 8:                        IF A(X,Y)<0 THEN GOSUB 270:IF T=0 THEN GOTO 630
  68. 620  NEXT:NEXT
  69. 630  X=A1:Y=A2:A=A3:B=A4:A0=5:A(X,Y)=A(A,B):A(A,B)=A8:GOTO 600
  70. 640  S=0:IF A(A,B)=1 THEN GOTO 660 ELSE IF A(A,B)=0 THEN S=1:RETURN:                 ELSE IF SGN(A(A,B))=SGN(A(X,Y)) THEN S=1:RETURN:ELSE S=1:GOTO 660
  71. 650  IF A(A,B)=1 THEN GOTO 660 ELSE IF SGN(A(A,B))=SGN(A(X,Y)) THEN RETURN:          ELSE GOTO 660
  72. 660  LOCATE 1,78,0:PRINT "  ";:ON A0 GOTO 670, 680, 690, 700, 710:GOTO 720
  73. 670  IF A6=A AND A7=B THEN B1=B1+1:RETURN:ELSE RETURN
  74. 680  IF A3=A AND A4=B THEN T=0:RETURN:ELSE RETURN
  75. 690  IF B4=A AND B9=B THEN D=1:RETURN:ELSE RETURN
  76. 700  IF A6=A AND A7=B THEN C=1:RETURN:ELSE RETURN
  77. 710  IF A(A,B)<0 THEN GOTO 580 ELSE RETURN
  78. 720  B3=S:W=X:M=Y:N=A:H=B:P=A(A,B):A(A,B)=A(X,Y):A(X,Y)=1:B1=0
  79. 730  A0=5:FOR X=1 TO 8:FOR Y=1 TO 8:IF A(X,Y)>1 THEN GOSUB 250
  80. 740  NEXT:NEXT:X=N:Y=H:A0=1:GOSUB 270:A0=0:S=B3:X=W:Y=M:A=N:B=H:A(X,Y)=A(A,B):       A(A,B)=P
  81. 750  B6!=1/(ABS(4.5-A)+ABS(4.5-B)+1):IF A(X,Y)<-2 AND A(X,Y)>-9 THEN                 B6!=B6!+1/(ABS(A6-A)+ABS(A7-B)+5)+RND(0)/15
  82. 760  G!=P+B1+B6!:IF P=99 THEN GOSUB 900:                                             LOCATE 25,1,1:PRINT "MATE ";B$;:GOTO 2190
  83. 770  IF G!<=F! THEN RETURN
  84. 780  F!=G!:E=X:Q=Y:R=A:U=B:RETURN
  85. 790  CLS
  86. 800  Y=0:FOR J=896 TO 0 STEP -128:Y=Y+1:X=0:FOR K=J TO 42+J STEP 6:X=X+1:            T(X,Y)=K:NEXT:NEXT
  87. 810  Y=0:FOR J=960 TO 64 STEP -128:Y=Y+1:X=0:FOR K=J TO 42+J STEP 6:X=X+1:            B(X,Y)=K:NEXT:NEXT
  88. 820  DATA -7, -4, -5, -9, -99, -5, -4, -7
  89. 830  DATA -2, -2, -2, -2, -2, -2, -2, -2
  90. 840  DATA 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
  91. 850  DATA 2, 2, 2, 2, 2, 2, 2, 2
  92. 860  DATA 7, 4, 5, 9, 99, 5, 4, 7
  93. 870  FOR Y=8 TO 1 STEP -1:FOR X=1 TO 7 STEP 2:S(X,Y)=I:S(X+1,Y)=-I:NEXT:I=-I:NEXT
  94. 880  FOR Y=8 TO 1 STEP -1:FOR X=1 TO 8:READ A(X,Y):NEXT:NEXT:RETURN
  95. 890  I=-I:A(4,1)=99:A(5,1)=9:A(4,8)=-99:A(5,8)=-9
  96. 900  FOR Y=1 TO 8:FOR X=1 TO 8:GOSUB 910:NEXT:NEXT:RETURN
  97. 910  IF S(X,Y)>0 THEN GOTO 940
  98. 920  ON ABS(A(X,Y)) GOSUB 980, 1040, 0, 1340, 1440, 0, 1540, 0, 1140                   :IF ABS(A(X,Y))=99 THEN GOSUB 1240:RETURN ELSE RETURN
  99. 940  ON ABS(A(X,Y)) GOSUB 960, 990, 0, 1290, 1390, 0, 1490, 0, 1090                    :IF ABS(A(X,Y))=99 THEN GOSUB 1190:RETURN ELSE RETURN
  100. 960  IF S(X,Y)<0 THEN GOTO 980
  101. 970  LOCATE 25-Y*3,X*8+1,0
  102. 971  PRINT STRING$(8,CHR$(219));
  103. 972  LOCATE 26-Y*3,X*8+1,0
  104. 973  PRINT STRING$(8,CHR$(219));
  105. 974  LOCATE 27-Y*3,X*8+1,0
  106. 975  PRINT STRING$(8,CHR$(219));:RETURN
  107. 980  LOCATE 25-Y*3,X*8+1,0
  108. 981  PRINT STRING$(8," ");
  109. 982  LOCATE 26-Y*3,X*8+1,0
  110. 983  PRINT STRING$(8," ");
  111. 984  LOCATE 27-Y*3,X*8+1,0
  112. 985  PRINT STRING$(8," ");:RETURN
  113. 990  IF I*A(X,Y)<0 THEN GOTO 1020
  114. 1000  LOCATE 25-Y*3,X*8+1,0
  115. 1001  PRINT STRING$(8,CHR$(219));
  116. 1010  LOCATE 26-Y*3,X*8+1,0
  117. 1011  PRINT STRING$(3,CHR$(219));CHR$(2);STRING$(4,CHR$(219));
  118. 1012  LOCATE 27-Y*3,X*8+1,0
  119. 1013  PRINT STRING$(8,CHR$(219)):RETURN
  120. 1020  LOCATE 25-Y*3,X*8+1,0
  121. 1021  PRINT STRING$(8,CHR$(219));
  122. 1030  LOCATE 26-Y*3,X*8+1,0
  123. 1031  PRINT STRING$(3,CHR$(219));CHR$(1);STRING$(4,CHR$(219));
  124. 1032  LOCATE 27-Y*3,X*8+1,0
  125. 1033  PRINT STRING$(8,CHR$(219));:RETURN
  126. 1040  IF I*A(X,Y)<0 THEN GOTO 1070
  127. 1050  LOCATE 25-Y*3,X*8+1,0
  128. 1051  PRINT STRING$(8,CHR$(32));
  129. 1060  LOCATE 26-Y*3,X*8+1,0
  130. 1061  PRINT STRING$(3,CHR$(32));CHR$(2);STRING$(4,CHR$(32));
  131. 1062  LOCATE 27-Y*3,X*8+1,0
  132. 1063  PRINT STRING$(8,CHR$(32)):RETURN
  133. 1070  LOCATE 25-Y*3,X*8+1,0
  134. 1071  PRINT STRING$(8,CHR$(32));
  135. 1080  LOCATE 26-Y*3,X*8+1,0
  136. 1081  PRINT STRING$(3,CHR$(32));CHR$(1);STRING$(4,CHR$(32));
  137. 1082  LOCATE 27-Y*3,X*8+1,0
  138. 1083  PRINT STRING$(8,CHR$(32));:RETURN
  139. 1090  IF I*A(X,Y)<0 THEN GOTO 1120
  140. 1100  LOCATE 25-Y*3,X*8+1,0
  141. 1101  PRINT STRING$(2,CHR$(219));STRING$(3,CHR$(178));STRING$(3,CHR$(219));
  142. 1110  LOCATE 26-Y*3,X*8+1,0
  143. 1111  PRINT CHR$(219)+"QUEEN"+CHR$(219);CHR$(219);
  144. 1112  LOCATE 27-Y*3,X*8+1,0
  145. 1113  PRINT STRING$(2,CHR$(219));STRING$(3,CHR$(178));STRING$(3,CHR$(219));          :RETURN
  146. 1120  LOCATE 25-Y*3,X*8+1,0
  147. 1121  PRINT STRING$(2,CHR$(219));STRING$(3,CHR$(176));STRING$(3,CHR$(219));
  148. 1130  LOCATE 26-Y*3,X*8+1,0
  149. 1131  PRINT CHR$(219)+"QUEEN"+CHR$(219);CHR$(219);
  150. 1132  LOCATE 27-Y*3,X*8+1,0
  151. 1133  PRINT STRING$(2,CHR$(219));STRING$(3,CHR$(176));STRING$(3,CHR$(219));          :RETURN
  152. 1140  IF I*A(X,Y)<0 THEN GOTO 1170
  153. 1150  LOCATE 25-Y*3,X*8+1,0
  154. 1151  PRINT STRING$(2,CHR$(32));STRING$(3,CHR$(178));STRING$(3,CHR$(32));
  155. 1160  LOCATE 26-Y*3,X*8+1,0
  156. 1161  PRINT CHR$(32)+"QUEEN"+CHR$(32);CHR$(32);
  157. 1162  LOCATE 27-Y*3,X*8+1,0
  158. 1163  PRINT STRING$(2,CHR$(32));STRING$(3,CHR$(178));STRING$(3,CHR$(32));            :RETURN
  159. 1170  LOCATE 25-Y*3,X*8+1,0
  160. 1171  PRINT STRING$(2,CHR$(32));STRING$(3,CHR$(176));STRING$(3,CHR$(32));
  161. 1180  LOCATE 26-Y*3,X*8+1,0
  162. 1181  PRINT CHR$(32)+"QUEEN"+CHR$(32);CHR$(32);
  163. 1182  LOCATE 27-Y*3,X*8+1,0
  164. 1183  PRINT STRING$(2,CHR$(32));STRING$(3,CHR$(176));STRING$(3,CHR$(32));            :RETURN
  165. 1190  IF I*A(X,Y)<0 THEN GOTO 1220
  166. 1200  LOCATE 25-Y*3,X*8+1,0
  167. 1201  PRINT STRING$(2,CHR$(219));STRING$(4,CHR$(178));STRING$(2,CHR$(219));
  168. 1210  LOCATE 26-Y*3,X*8+1,0
  169. 1211  PRINT CHR$(219);CHR$(178)+"KING"+CHR$(178);CHR$(219);
  170. 1212  LOCATE 27-Y*3,X*8+1,0
  171. 1213  PRINT STRING$(2,CHR$(219));STRING$(4,CHR$(178));STRING$(2,CHR$(219));          :RETURN
  172. 1220  LOCATE 25-Y*3,X*8+1,0
  173. 1221  PRINT STRING$(2,CHR$(219));STRING$(4,CHR$(176));STRING$(2,CHR$(219));
  174. 1230  LOCATE 26-Y*3,X*8+1,0
  175. 1231  PRINT CHR$(219);CHR$(176)+"KING"+CHR$(176);CHR$(219);
  176. 1232  LOCATE 27-Y*3,X*8+1,0
  177. 1233  PRINT STRING$(2,CHR$(219));STRING$(4,CHR$(176));STRING$(2,CHR$(219));          :RETURN
  178. 1240  IF I*A(X,Y)<0 THEN GOTO 1270
  179. 1250  LOCATE 25-Y*3,X*8+1,0
  180. 1251  PRINT STRING$(2,CHR$(32));STRING$(4,CHR$(178));STRING$(2,CHR$(32));
  181. 1260  LOCATE 26-Y*3,X*8+1,0
  182. 1261  PRINT CHR$(32);CHR$(178)+"KING"+CHR$(178);CHR$(32);
  183. 1262  LOCATE 27-Y*3,X*8+1,0
  184. 1263  PRINT STRING$(2,CHR$(32));STRING$(4,CHR$(178));STRING$(2,CHR$(32));            :RETURN
  185. 1270  LOCATE 25-Y*3,X*8+1,0
  186. 1271  PRINT STRING$(2,CHR$(32));STRING$(4,CHR$(176));STRING$(2,CHR$(32));
  187. 1280  LOCATE 26-Y*3,X*8+1,0
  188. 1281  PRINT CHR$(32);CHR$(176)+"KING"+CHR$(176);CHR$(32);
  189. 1282  LOCATE 27-Y*3,X*8+1,0
  190. 1283  PRINT STRING$(2,CHR$(32));STRING$(4,CHR$(176));STRING$(2,CHR$(32));            :RETURN
  191. 1290  IF I*A(X,Y)<0 THEN GOTO 1320
  192. 1300  LOCATE 25-Y*3,X*8+1,0
  193. 1301  PRINT STRING$(3,CHR$(219));STRING$(2,CHR$(178));STRING$(3,CHR$(219));
  194. 1310  LOCATE 26-Y*3,X*8+1,0
  195. 1311  PRINT CHR$(219)+"KNIGHT"+CHR$(219);
  196. 1312  LOCATE 27-Y*3,X*8+1,0
  197. 1313  PRINT STRING$(3,CHR$(219));STRING$(2,CHR$(178));STRING$(3,CHR$(219));          :RETURN
  198. 1320  LOCATE 25-Y*3,X*8+1,0
  199. 1321  PRINT STRING$(3,CHR$(219));STRING$(2,CHR$(176));STRING$(3,CHR$(219));
  200. 1330  LOCATE 26-Y*3,X*8+1,0
  201. 1331  PRINT CHR$(219)+"KNIGHT"+CHR$(219);
  202. 1332  LOCATE 27-Y*3,X*8+1,0
  203. 1333  PRINT STRING$(3,CHR$(219));STRING$(2,CHR$(176));STRING$(3,CHR$(219));          :RETURN
  204. 1340  IF I*A(X,Y)<0 THEN GOTO 1370
  205. 1350  LOCATE 25-Y*3,X*8+1,0
  206. 1351  PRINT STRING$(3,CHR$(32));STRING$(2,CHR$(178));STRING$(3,CHR$(32));
  207. 1360  LOCATE 26-Y*3,X*8+1,0
  208. 1361  PRINT CHR$(32)+"KNIGHT"+CHR$(32);
  209. 1362  LOCATE 27-Y*3,X*8+1,0
  210. 1363  PRINT STRING$(3,CHR$(32));STRING$(2,CHR$(178));STRING$(3,CHR$(32));            :RETURN
  211. 1370  LOCATE 25-Y*3,X*8+1,0
  212. 1371  PRINT STRING$(3,CHR$(32));STRING$(2,CHR$(176));STRING$(3,CHR$(32));
  213. 1380  LOCATE 26-Y*3,X*8+1,0
  214. 1381  PRINT CHR$(32)+"KNIGHT"+CHR$(32);
  215. 1382  LOCATE 27-Y*3,X*8+1,0
  216. 1383  PRINT STRING$(3,CHR$(32));STRING$(2,CHR$(176));STRING$(3,CHR$(32));            :RETURN
  217. 1390  IF I*A(X,Y)<0 THEN GOTO 1420
  218. 1400  LOCATE 25-Y*3,X*8+1,0
  219. 1401  PRINT STRING$(3,CHR$(219));STRING$(2,CHR$(178));STRING$(3,CHR$(219));
  220. 1410  LOCATE 26-Y*3,X*8+1,0
  221. 1411  PRINT CHR$(219)+"BISHOP"+CHR$(219);
  222. 1412  LOCATE 27-Y*3,X*8+1,0
  223. 1413  PRINT STRING$(3,CHR$(219));STRING$(2,CHR$(178));STRING$(3,CHR$(219));          :RETURN
  224. 1420  LOCATE 25-Y*3,X*8+1,0
  225. 1421  PRINT STRING$(3,CHR$(219));STRING$(2,CHR$(176));STRING$(3,CHR$(219));
  226. 1430  LOCATE 26-Y*3,X*8+1,0
  227. 1431  PRINT CHR$(219)+"BISHOP"+CHR$(219);
  228. 1432  LOCATE 27-Y*3,X*8+1,0
  229. 1433  PRINT STRING$(3,CHR$(219));STRING$(2,CHR$(176));STRING$(3,CHR$(219));          :RETURN
  230. 1440  IF I*A(X,Y)<0 THEN GOTO 1470
  231. 1450  LOCATE 25-Y*3,X*8+1,0
  232. 1451  PRINT STRING$(3,CHR$(32));STRING$(2,CHR$(178));STRING$(3,CHR$(32));
  233. 1460  LOCATE 26-Y*3,X*8+1,0
  234. 1461  PRINT CHR$(32)+"BISHOP"+CHR$(32);
  235. 1462  LOCATE 27-Y*3,X*8+1,0
  236. 1463  PRINT STRING$(3,CHR$(32));STRING$(2,CHR$(178));STRING$(3,CHR$(32));            :RETURN
  237. 1470  LOCATE 25-Y*3,X*8+1,0
  238. 1471  PRINT STRING$(3,CHR$(32));STRING$(2,CHR$(176));STRING$(3,CHR$(32));
  239. 1480  LOCATE 26-Y*3,X*8+1,0
  240. 1481  PRINT CHR$(32)+"BISHOP"+CHR$(32);
  241. 1482  LOCATE 27-Y*3,X*8+1,0
  242. 1483  PRINT STRING$(3,CHR$(32));STRING$(2,CHR$(176));STRING$(3,CHR$(32));            :RETURN
  243. 1490  IF I*A(X,Y)<0 THEN GOTO 1520
  244. 1500  LOCATE 25-Y*3,X*8+1,0
  245. 1501  PRINT CHR$(219);CHR$(219);CHR$(178);CHR$(219);CHR$(219);CHR$(178);              CHR$(219);CHR$(219);
  246. 1510  LOCATE 26-Y*3,X*8+1,0
  247. 1511  PRINT CHR$(219);CHR$(219)+"ROOK"+CHR$(219);CHR$(219);
  248. 1512  LOCATE 27-Y*3,X*8+1,0
  249. 1513  PRINT STRING$(2,CHR$(219));STRING$(4,CHR$(178));STRING$(2,CHR$(219));          :RETURN
  250. 1520  LOCATE 25-Y*3,X*8+1,0
  251. 1521  PRINT CHR$(219);CHR$(219);CHR$(176);CHR$(219);CHR$(219);CHR$(176);              CHR$(219);CHR$(219);
  252. 1530  LOCATE 26-Y*3,X*8+1,0
  253. 1531  PRINT CHR$(219);CHR$(219)+"ROOK"+CHR$(219);CHR$(219);
  254. 1532  LOCATE 27-Y*3,X*8+1,0
  255. 1533  PRINT STRING$(2,CHR$(219));STRING$(4,CHR$(176));STRING$(2,CHR$(219));          :RETURN
  256. 1540  IF I*A(X,Y)<0 THEN GOTO 1570
  257. 1550  LOCATE 25-Y*3,X*8+1,0
  258. 1551  PRINT CHR$(32);CHR$(32);CHR$(178);CHR$(32);CHR$(32);CHR$(178);                  CHR$(32);CHR$(32);
  259. 1560  LOCATE 26-Y*3,X*8+1,0
  260. 1561  PRINT CHR$(32);CHR$(32)+"ROOK"+CHR$(32);CHR$(32);
  261. 1562  LOCATE 27-Y*3,X*8+1,0
  262. 1563  PRINT STRING$(2,CHR$(32));STRING$(4,CHR$(178));STRING$(2,CHR$(32));            :RETURN
  263. 1570  LOCATE 25-Y*3,X*8+1,0
  264. 1571  PRINT CHR$(32);CHR$(32);CHR$(176);CHR$(32);CHR$(32);CHR$(176);                  CHR$(32);CHR$(32);
  265. 1580  LOCATE 26-Y*3,X*8+1,0
  266. 1581  PRINT CHR$(32);CHR$(32)+"ROOK"+CHR$(32);CHR$(32);
  267. 1582  LOCATE 27-Y*3,X*8+1,0
  268. 1583  PRINT STRING$(2,CHR$(32));STRING$(4,CHR$(176));STRING$(2,CHR$(32));            :RETURN
  269. 1590  LOCATE 25,31,1:PRINT STRING$(10," ");
  270. 1600  X$=INKEY$:IF X$="N" THEN N$=X$
  271. 1610  IF X$>="A" AND X$<="H" THEN X=VAL(CHR$(ASC(X$)-16)):GOTO 1730
  272. 1620  IF X$="N" THEN GOSUB 2030
  273. 1630  IF X$="K" AND A(5,1)=99 AND A(8,1)=7 THEN A(5,1)=1:A(8,1)=1:A(7,1)=99          :A(6,1)=7:GOTO 1800
  274. 1640  IF X$="Q" AND A(5,1)=99 AND A(1,1)=7 THEN A(5,1)=1:A(1,1)=1:A(3,1)=99          :A(4,1)=7:GOTO 1800
  275. 1650  IF X$="K" AND A(4,1)=99 AND A(1,1)=7 THEN A(4,1)=1:A(1,1)=1:A(2,1)=99          :A(3,1)=7:GOTO 1800
  276. 1660  IF X$="Q" AND A(4,1)=99 AND A(8,1)=7 THEN A(4,1)=1:A(8,1)=1:A(6,1)=99          :A(5,1)=7:GOTO 1800
  277. 1670  IF X$="X" THEN GOSUB 1830:LOCATE 25,1,0:PRINT "EXCHANGING         ";           :GOSUB 2480:IF CL$="Y" THEN LOCATE 25,50,0:PRINT "START ";TIME$;:GOTO 100       :ELSE:GOTO 100
  278. 1680  IF X$="S" THEN GOTO 1820
  279. 1690  IF X$="M" THEN GOSUB 1840
  280. 1700  IF X$="I" THEN GOSUB 2220:CLS:GOSUB 900:LOCATE 25,1,1                          :PRINT "MOVE "+CHR$(7);B$;
  281. 1710  IF X$="L" THEN GOSUB 2040
  282. 1720  GOTO 1600
  283. 1730  LOCATE 25,21,1:PRINT X$;:LOCATE 25,31,1:PRINT "            ";
  284. 1740  Y=VAL(INKEY$):IF Y=0 THEN GOTO 1740
  285. 1750  LOCATE 25,22,1:PRINT Y;:LOCATE 25,25,1:PRINT "-";
  286. 1760  IF A(X,Y)<2 OR A(X,Y)>99 THEN LOCATE 25,31,1:PRINT "ENTRY ERROR ";             :GOTO 1590
  287. 1770  A$=INKEY$:IF A$<"A" OR A$>"H" THEN GOTO 1770 ELSE A=VAL(CHR$(ASC(A$)-16))
  288. 1780  LOCATE 25,27,1:PRINT A$;
  289. 1790  B=VAL(INKEY$):IF B=0 THEN GOTO 1790 ELSE LOCATE 25,28,1:PRINT B;
  290. 1800  IF X$="K" OR X$="Q" THEN LOCATE 25,20,1:PRINT "CSTL. ";X$;"-SIDE";             :GOSUB 1830 ELSE GOSUB 1830
  291. 1810  IF CL$="Y" THEN LOCATE 25,50,0:PRINT "START ";TIME$;
  292. 1820  RETURN
  293. 1830  LOCATE 25,1,1:PRINT STRING$(79," ");:RETURN
  294. 1840  GOSUB 1830:LOCATE 25,1,1:PRINT "MODIFYING          ";
  295. 1850  GOSUB 2010:IF M$<"A" OR M$>"H" THEN GOTO 1850
  296. 1860  X=VAL(CHR$(ASC(M$)-16)):LOCATE 25,21,1:PRINT M$;
  297. 1870  M$=INKEY$:IF M$<"1" OR M$>"8" THEN GOTO 1870
  298. 1880  Y=VAL(M$):LOCATE 25,23,1:PRINT M$;" = ";
  299. 1890  M$=INKEY$:IF M$="C" OR M$="P" OR M$="E" THEN S1$=M$:LOCATE 25,27,1             :PRINT M$;:ELSE GOTO 1890
  300. 1900  M$=INKEY$:IF M$="S" OR M$="P" OR M$="N" OR M$="B" OR M$="R" OR M$="Q" OR        M$="K" THEN V$=M$:LOCATE 25,29,1:PRINT M$; ELSE GOTO 1900
  301. 1910  IF V$="P" THEN V1=2
  302. 1920  IF V$="N" THEN V1=4
  303. 1930  IF V$="B" THEN V1=5
  304. 1940  IF V$="R" THEN V1=7
  305. 1950  IF V$="Q" THEN V1=9
  306. 1960  IF V$="K" THEN V1=99
  307. 1970  IF V$="S" THEN V1=1
  308. 1980  IF S1$="C" AND V1<>1 THEN V1=-V1
  309. 1990  A(X,Y)=V1:IF S1$="E" THEN A(X,Y)=1
  310. 2000  GOSUB 910:GOTO 1840
  311. 2010  M$=INKEY$:IF M$="N" THEN GOSUB 2030:GOTO 2010:ELSE IF M$="Z" THEN               GOSUB 1830:LOCATE 25,20,1:PRINT "         ";:GOSUB 900:ELSE RETURN
  312. 2020  IF CL$="Y" THEN LOCATE 25,51,0:PRINT "START ";TIME$;:GOTO 100 ELSE GOTO 100
  313. 2030  FOR J=1 TO 8:FOR K=1 TO 8:K$=STR$(K)
  314. 2031  LOCATE 27-K*3,J*8+1,0
  315. 2032  PRINT CHR$(J+64);RIGHT$(K$,1);:NEXT:NEXT:RETURN
  316. 2040  GOSUB 1830:LOCATE 25,20,1:PRINT "LEVEL=";B8!;:PRINT "CHANGE LEVELS?";
  317. 2050  C$=INKEY$:IF C$="N" THEN GOTO 2090 ELSE IF C$="Y" THEN LOCATE 25,27,1          :PRINT "       ";:GOSUB 1830:ELSE GOTO 2050
  318. 2060  L1$=INKEY$:IF L1$="" THEN GOTO 2060 ELSE IF L1$>="0" AND L1$<="9" THEN          LOCATE 25,27,1:PRINT L1$;:ELSE GOTO 2060
  319. 2070  L2$=INKEY$:IF L2$="" THEN GOTO 2070 ELSE IF L2$<"0" OR L2$>"9" THEN L2$=L1$    :L1$="0"
  320. 2080  B8!=VAL(L1$)*10+VAL(L2$):B7!=B8!/2:LOCATE 25,27,0:PRINT L1$;L2$;
  321. 2090  GOSUB 1830:LOCATE 25,20,0:PRINT "              ";:LOCATE 25,1,1                :PRINT "MOVE ";B$;:RETURN
  322. 2100  REM *** PROMOTION ROUTINE ***
  323. 2110  LOCATE 2,1,1:PRINT "P, N, B, R, Q ";
  324. 2120  Z$=INKEY$:IF Z$="P" THEN A(A,B)=2:GOTO 2180
  325. 2130  IF Z$="N" THEN A(A,B)=4:GOTO 2180
  326. 2140  IF Z$="B" THEN A(A,B)=5:GOTO 2180
  327. 2150  IF Z$="R" THEN A(A,B)=7:GOTO 2180
  328. 2160  IF Z$="Q" THEN A(A,B)=9:GOTO 2180
  329. 2170  GOTO 2120
  330. 2180  RETURN
  331. 2190  IF CL$="Y" THEN LOCATE 25,61,1:PRINT "STOP ";TIME$;
  332. 2200  LOCATE 25,1,1:PRINT "HIT (P) TO PLAY OR HIT (B) FOR BASIC";
  333. 2210  A$=INKEY$:IF A$="" THEN GOTO 2210 ELSE IF A$="B" THEN CLS:END                   ELSE IF A$="P" THEN RUN ELSE GOTO 2210
  334. 2220  CLS
  335. 2221  PRINT "1. USE LIST TO INSURE LOADED RIGHT, THE LAST LINE IS 65529 "
  336. 2230  PRINT "2. ALSE NOTE MEMORY SIZE AS A DOUBLE CHECK "
  337. 2240  PRINT "3. SPECIAL COMMANDS DURING PLAYER'S MOVE ARE:"
  338. 2250  PRINT "   TYPE 'N' - TO NUMBER THE BOARD "
  339. 2260  PRINT "        'K' - TO CASTLE KING SIDE "
  340. 2270  PRINT "        'Q' - TO CASTLE QUEEN SIDE "
  341. 2280  PRINT "        'X' - TO EXCHANGE PIECES AND LET COMPUTER MOVE"
  342. 2290  PRINT "        'S' - TO LET THE COMPUTER PLAY BY ITSELF "
  343. 2300  PRINT "        'M' - TO MODIFY THE BOARD, ENTER THE SQUARE FOLLOWED BY"
  344. 2310  PRINT "                 C, P, OR E  FOR COMPUTER, PLAYER, OR EMPTY"
  345. 2320  PRINT "                 AND S,P,N,B,R,Q,K  FOR SQUARE,PAWN, ETC..."
  346. 2330  PRINT "        'Z' - TO ESCAPE MODIFY AND LET COMPUTER MOVE"
  347. 2340  PRINT "        'I' - TO GET INSTRUCTIONS AGAIN"
  348. 2350  PRINT "        'L' - TO LOOK AT OR CHANGE LEVEL OF PLAY"
  349. 2360  REM ********************************************************************
  350. 2370  INPUT "HIT ENTER TO CONTINUE";EN$:PRINT
  351. 2380  PRINT "4. TO PROMOTE TO P,N,B,R,Q ENTER THE LETTER WHEN PROMOTED"
  352. 2390  PRINT "5. TO CAPTURE 'EN PASSANT' SPECIFY THE 'FROM' - 'TO' SQUARES"
  353. 2400  PRINT "6. LEVELS OF PLAY ARE FROM 01 TO 24"
  354. 2410  PRINT "7. COMPUTER ASSUMES MATE IF KING IS LEFT IN CHECK SO BE SURE TO "
  355. 2411  PRINT "    WATCH FOR CHECK MESSAGE"
  356. 2420  PRINT "8. IF A MOVE IS ILLEGAL OR AN ENTRY ERROR IS MADE SIMPLY TYPE IN"
  357. 2421  PRINT "    A NEW MOVE.  A MOVE MAY BE STARTED OVER BY FORCING AN ERROR. (E.G. '9')."
  358. 2430  PRINT "9. IF <BREAK> IS HIT DURING THE GAME, TYPE 'GOSUB 900:CONT' TO"
  359. 2435  PRINT "    DRAW BOARD AND CONTINUE"
  360. 2440  PRINT "10. YOU HAVE A CHOICE OF BLACK OR WHITE, THE COMPUTER WILL ALWAYS"
  361. 2441  PRINT "     BE AT THE TOP OF THE SCREEN"
  362. 2450  PRINT:PRINT:INPUT "HIT ENTER TO CONTINUE GAME";EN$
  363. 2460  RETURN
  364. 2480  I=-I:GOSUB 2490:GOSUB 900:RETURN
  365. 2490  L=0:FOR J=1 TO 8:FOR K=1 TO 8:L=L+1:IF A(J,K)<>1 THEN C(L)=-A(J,K)             :ELSE C(L)=A(J,K)
  366. 2500  NEXT:NEXT
  367. 2510  L=65:FOR J=1 TO 8: FOR K=1 TO 8:L=L-1:A(J,K)=C(L):NEXT:NEXT
  368. 2520  RETURN
  369. 65529  END
  370.